import winston from 'winston';
import DailyRotateFile from 'winston-daily-rotate-file';
import path from 'path';
import os from 'os';
import fs from 'fs';
import moment from 'moment-timezone';

// 使用用户目录存放日志
const logDir = path.join(os.homedir(), '.my-electron-app', 'logs');

if (!fs.existsSync(logDir)) {
  fs.mkdirSync(logDir, { recursive: true });
}

// 设置为中国时区（可按需修改）
const timeZone = 'Asia/Shanghai';
// 自定义时间戳格式化函数
const myFormat = winston.format.printf(({ level, message, timestamp }) => {
  return `${moment(timestamp).tz(timeZone).format('YYYY-MM-DD HH:mm:ss')} [${level.toUpperCase()}]: ${message}`;
});

// 创建 DailyRotateFile 实例，限制每个文件最多 10M，保留 5 个历史文件
const fileTransport = new DailyRotateFile({
  filename: '%DATE%.log',         // 按天分割文件名
  dirname: logDir,                 // 存放路径
  maxSize: '10m',                  // 单个文件最大 10MB
  maxFiles: '5d',                  // 保留最近 5 天的日志（可改为 '5' 表示 5 个文件）
  datePattern: 'YYYY-MM-DD',       // 文件名日期格式
  zippedArchive: false,            // 是否压缩旧文件
  level: 'info',                   // 记录 info 及以上级别日志
  format: winston.format.combine(
    winston.format.timestamp(), // 默认是 ISOString 格式
    myFormat
  )
});
// 创建 logger 实例
const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    myFormat
  ),
  transports: [
    // 控制台输出
    new winston.transports.Console({
      level: 'silly' // 所有日志都输出到控制台
    }),
    // 文件输出
    fileTransport
  ],
  exceptionHandlers: [//用于捕获 未处理的异常
    new winston.transports.File({ filename: path.join(logDir, 'exceptions.log') })
  ],
  rejectionHandlers: [//用于捕获 未处理的 Promise
    new winston.transports.File({ filename: path.join(logDir, 'rejections.log') })
  ]
});

export default logger; // ✅ 添加默认导出